// ProjectName: go-learn-demo
// PackageName: _3_chan_flag
// Description:
// Author: hy.bai
// Date: 2025-07-31 11:00

package main

import (
	"fmt"
)

var length int = 20

func writeData(ch1 chan int) {
	for i := 0; i < length; i++ {
		ch1 <- (i + 1) * 10
	}
	close(ch1)
}

func readData(ch1 chan int, flag *bool) {
	var k = 1
	for val := range ch1 {
		fmt.Printf("第%d次 - 读到数据:%v\n", k, val)
		k++
	}
	*flag = true // 标记数据读完了
}

func main() {
	// 定义一个channel和flag标记
	var ch1 chan int = make(chan int, length)
	var flag *bool = new(bool) // 创建一个指针类型标记。必须是指针类型。
	go writeData(ch1)
	go readData(ch1, flag)
	for {
		if *flag {
			fmt.Println("任务执行完毕")
			break
		}
	}
	fmt.Println("main函数执行完成")
}
